插全屏广告

简介

插全屏广告是将原有的插屏广告和全屏视频广告结合,在同一个广告类型下支持混出的广告类型。相关接入接口同插全屏广告类型。

注意事项

①需要确保在SDK初始化成功后再进行广告请求,否则可能导致广告请求加载失败。

②聚合维度广告是通过广告位ID发起广告请求的

③在广告接入前需要明确各ADN对应聚合广告样式情况,以确保正确完成广告接入,避免由于广告类型不匹配导致接入报错等情况的发生。

④由于各广告平台对于包名校验规则不同,需确保在穿山甲媒体平台填写的包名符合各adn平台规范,避免由于包名校验不匹配导致的无广告返回情况的产生。

⑤当插屏/全屏广告混用时注意在媒体平台勾选的广告类型需与第三方广告平台广告类型保持一致。

⑥为了保证播放流畅,开发者在收到nativeExpressFullscreenVideoAdDidLoad:回调来展示广告,广告展示前可通过isReady字段来判断当前广告是否可用。

⑦当广告无法展示时,建议在展示失败nativeExpressFullscreenVideoAdDidShowFailed:回调内输出对应的error错误码明确展示失败的原因。

⑧如若针对展示失败有重试机制,建议只重试一次即可,避免无限重试引发死循环场景。

⑨当展示失败/回调监听不执行时,建议检查是否有广告对象被覆盖或者被提前释放的场景导致,每次发次广告请求时,需要重新创建新的广告来调用广告请求方法。

⑩视频是否静音由接口广告入参(CloooudAdSlot)中mutedIfCan控制,默认为NO,仅对GDT、KS生效;如若设置首次预加载功能,请检查静音接口设置是否与项目实际情况相符,默认为NO。

接入插全屏广告

// 创建广告对象
- (void)p_buildAd {
    self.fullscreenAd = [[CloooudNativeExpressFullscreenVideoAd alloc] initWithSlotID:slotID]; // 聚合维度通过广告位ID发起请求
    self.fullscreenAd.delegate = self;
}
// 触发广告加载
- (void)p_loadAdData {
    [self.fullscreenAd loadAdData];
}
// 据华为维度收到load成功回调后展示
#pragma mark - CloooudNativeExpressFullscreenVideoAdDelegate
- (void)nativeExpressFullscreenVideoAdDidLoad:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {
    [self.fullscreenAd showAdFromRootViewController:self];
}

获取展示后广告信息示例

在收到展示回调Visible后访问可获取到正确信息

- (void)logAdInfoAfterShow {
    CloooudMRitInfo *info = [self.fullscreenAd.mediation getShowEcpmInfo];
    // 展示后可获取信息如下
    NSLog(@"ecpm:%@", info.ecpm); // 单位:分
    NSLog(@"platform:%@", info.adnName);
    NSLog(@"ritID:%@", info.slotID);
    NSLog(@"requestID:%@", info.requestID ?: @"None");

    NSLog(@"getAdLoadInfoList:%@", [self.fullscreenAd.mediation getAdLoadInfoList]);
}

接口及回调说明

CloooudNativeExpressFullscreenVideoAd说明

方法 说明
@property (nonatomic, weak, nullable) id delegate; 插全屏广告代理,聚合维度使用CloooudMNativeExpressFullscreenVideoAdDelegate
@property (nonatomic, copy, readonly) CloooudDictionary *mediaExt; 配置参数
@property (nonatomic, assign, readonly) BOOL materialMetaIsFromPreload; 默认是否 纯试玩,此字段的值在下载成功后才准确 聚合维度不支持此接口。
@property (nonatomic, assign, readonly) NSTimeInterval expireTimestamp; 过期时间戳 此字段的值在下载成功后才准确 聚合维度不支持此接口。
- (instancetype)initWithSlotID:(NSString *)slotID; 广告位ID
- (instancetype)initWithSlot:(CloooudAdSlot *)slot; 创建广告slot参数
- (void)loadAdData; 加载广告
- (NSString *)getAdCreativeToken; 物料ID 聚合维度不支持
- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController; 广告展示回调
- (BOOL)showAdFromRootViewController:(UIViewController )rootViewController ritSceneDescribe:(NSString _Nullable)sceneDescirbe;
- (NSTimeInterval)getExpireTimestamp; 过期时间戳 此字段只有下载视频成功或获取权限后才准确 聚合维度不支持此接口
@property (nonatomic, strong, nullable, readonly) CloooudNativeExpressFullscreenVideoAdMediation *mediation; 当使用聚合广告位时,存在该属性,可获取聚合维度相关功能

CloooudNativeExpressFullscreenVideoAdMediationProtocol说明

方法 说明
@property (nonatomic, strong) CloooudRewardedVideoModel *rewardModel; 可选; 激励模型,用于全屏视频广告服务端激励回调; 目前支持的ADN:GDT
@property (nonatomic, assign, readonly) BOOL isReady; 是否已经准备广告展示,理论上在广告加载回调后即为YES,但受一些因素的影响(例如广告失效),可能为NO。建议在广告展示前调用该方法进行是否可以展示
- (CloooudMRitInfo *)getShowEcpmInfo; 返回显示广告对应的披露信息
- (CloooudMRitInfo *_Nullable)getCurrentBestEcpmInfo; 填充后可调用,返回当前最佳广告的ecpm;当为server bidding ad时访问需要白名单权限;nil为无权限
- (CloooudMRitInfo *_Nullable)getCurrentBestEcpmInfo; 填充后可调用,但推荐展示后调用,返回竞价广告的ecpm;当为server bidding ad时访问需要白名单权限;
- (NSArray<CloooudMRitInfo > )multiBiddingEcpmInfos; 填充后可调用,但推荐展示后调用,返回竞价广告的ecpm;当为server bidding ad时访问需要白名单权限;
- (NSArray<CloooudMRitInfo > _Nullable)cacheRitList; 填充后可调用, 返回广告缓存池内所有信息;nil为无权限
@property (nonatomic, assign, readonly) BOOL isLoading; 广告是否加载中
- (void)addParam:(id)param withKey:(NSString *)key; 添加参数 param 参数值 key 参数key
- (NSArray<CloooudMAdLoadInfo > )getAdLoadInfoList; 一次waterfall中各adn代码位加载广告失败原因,建议调用时机:展示广告时/超时时/全部返回报错时;返回nil表示一次加载无代码位加载失败或其加载无响应

CloooudNativeExpressFullscreenVideoAdDelegate说明

方法 说明
- (void)nativeExpressFullscreenVideoAdDidLoad:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告加载成功回调
- (void)nativeExpressFullscreenVideoAd:(CloooudNativeExpressFullscreenVideoAd )fullscreenVideoAd didFailWithError:(NSError _Nullable)error; 广告加载失败回调
- (void)nativeExpressFullscreenVideoAdViewRenderSuccess:(CloooudNativeExpressFullscreenVideoAd *)rewardedVideoAd; 广告渲染成功回调
- (void)nativeExpressFullscreenVideoAdViewRenderFail:(CloooudNativeExpressFullscreenVideoAd )rewardedVideoAd error:(NSError _Nullable)error; 广告渲染失败回调
- (void)nativeExpressFullscreenVideoAdDidDownLoadVideo:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告下载成功回调
- (void)nativeExpressFullscreenVideoAdWillVisible:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告即将展示回调
- (void)nativeExpressFullscreenVideoAdDidVisible:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告已经展示回调
- (void)nativeExpressFullscreenVideoAdDidClick:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告点击回调
- (void)nativeExpressFullscreenVideoAdDidClickSkip:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告跳过回调
- (void)nativeExpressFullscreenVideoAdWillClose:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告即将关闭回调
- (void)nativeExpressFullscreenVideoAdDidClose:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd; 广告关闭回调
- (void)nativeExpressFullscreenVideoAdDidPlayFinish:(CloooudNativeExpressFullscreenVideoAd )fullscreenVideoAd didFailWithError:(NSError _Nullable)error; 广告播放完成回调
- (void)nativeExpressFullscreenVideoAdCallback:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd withType:(CloooudNativeExpressFullScreenAdType) nativeExpressVideoAdType; 聚合场景不支持
- (void)nativeExpressFullscreenVideoAdDidCloseOtherController:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd interactionType:(CloooudInteractionType)interactionType; 此方法在另一个控制器关闭时调用。
interactionType:在app中打开appstore或打开网页或查看视频广告详情页面。 聚合维度不支持此场景。

CloooudMNativeExpressFullscreenVideoAdDelegate说明

方法 说明
- (void)nativeExpressFullscreenVideoAdDidShowFailed:(CloooudNativeExpressFullscreenVideoAd _Nonnull)fullscreenVideoAd error:(NSError _Nonnull)error; 广告展示失败回调 fullscreenVideoAd 广告管理对象 error 展示失败的原因
- (void)nativeExpressFullscreenVideoAdWillPresentFullScreenModal:(CloooudNativeExpressFullscreenVideoAd *_Nonnull)fullscreenVideoAd; 即将弹出广告详情页回调 fullscreenVideoAd 广告管理对象
- (void)nativeExpressFullscreenVideoAdServerRewardDidSucceed:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd verify:(BOOL)verify; 目前支持的ADN:GDT
- (void)nativeExpressFullscreenVideoAdServerRewardDidFail:(CloooudNativeExpressFullscreenVideoAd )fullscreenVideoAd error:(NSError )error; 目前支持的ADN:GDT

完整接入示例

- (void)loadAd {
    CloooudAdSlot *slot = [[CloooudAdSlot alloc] init];
    slot.ID = @"广告位ID"; // 聚合维度通过广告位ID发起请求
      CloooudNativeExpressFullscreenVideoAd *fullscreenAd = [[CloooudNativeExpressFullscreenVideoAd alloc] initWithSlot:slot];

    // 聚合功能
    slot.mediation.mutedIfCan = YES; // 静音 (聚合维度功能)
    // 设置竖屏 (聚合维度功能)
    [fullscreenAd.mediation addParam:@(0) withKey:@"show_direction"];
    fullscreenAd.delegate = self;
      // 奖励发放设置 仅针对GDT
    CloooudRewardedVideoModel *rewardedVideoModel = [[CloooudRewardedVideoModel alloc] init];
      rewardedVideoModel.rewardName = @"gdt";
      rewardedVideoModel.rewardAmount = 123;
      rewardedVideoModel.extra = ({
            NSDictionary *extra = @{
                @"value": @"1",
            };

        NSData *data = [NSJSONSerialization dataWithJSONObject:extra options:NSJSONWritingSortedKeys error:NULL];
        NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        json;
    });
    fullscreenAd.mediation.rewardModel = rewardedVideoModel;


  self.fullscreenAd = fullscreenAd;
    [self.fullscreenAd loadAdData];
}

/******** 插全屏广告回调处理 *********/
#pragma mark - CloooudMNativeExpressFullscreenVideoAdDelegate
// 广告加载成功
- (void)nativeExpressFullscreenVideoAdDidLoad:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {
    // 聚合维度在广告加载成功之后,可以调用展示方法,按照实际需要调整代码位置
    [fullscreenVideoAd showAdFromRootViewController:viewController];
}

// 广告加载失败
- (void)nativeExpressFullscreenVideoAd:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd didFailWithError:(NSError *_Nullable)error {

}

// 广告素材加载完成
- (void)nativeExpressFullscreenVideoAdDidDownLoadVideo:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {
    // 仅接入CSJ广告建议在收到该回调时进行广告展示
}

// 广告即将展示
- (void)nativeExpressFullscreenVideoAdWillVisible:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {

}

// 广告已经展示
- (void)nativeExpressFullscreenVideoAdDidVisible:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {
    /*
    //  (注意: getShowEcpmInfo 需要在当前广告展示之后调用, 展示之前调用该方法会返回 nil)
    CloooudMRitInfo *info = [fullscreenVideoAd.mediation getShowEcpmInfo];
    NSLog(@"ecpm:%@", info.ecpm);
    NSLog(@"platform:%@", info.adnName);
    NSLog(@"ritID:%@", info.slotID);
    NSLog(@"requestID:%@", info.requestID ?: @"None");
    */
}

// 广告被点击
- (void)nativeExpressFullscreenVideoAdDidClick:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {

}

// 广告被点击跳过
- (void)nativeExpressFullscreenVideoAdDidClickSkip:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {

}

// 广告即将关闭
- (void)nativeExpressFullscreenVideoAdWillClose:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {

}

// 广告已经关闭
- (void)nativeExpressFullscreenVideoAdDidClose:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd {

}

// 广告视频播放完成
- (void)nativeExpressFullscreenVideoAdDidPlayFinish:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd didFailWithError:(NSError *_Nullable)error {

}

// 广告展示失败
- (void)nativeExpressFullscreenVideoAdDidShowFailed:(CloooudNativeExpressFullscreenVideoAd *_Nonnull)fullscreenVideoAd error:(NSError *_Nonnull)error {

}

// 即将弹出广告详情页回调
- (void)nativeExpressFullscreenVideoAdWillPresentFullScreenModal:(CloooudNativeExpressFullscreenVideoAd *_Nonnull)fullscreenVideoAd {

}

// 奖励验证回调成功
- (void)nativeExpressFullscreenVideoAdServerRewardDidSucceed:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd verify:(BOOL)verify {

}

// 奖励验证回调失败
- (void)nativeExpressFullscreenVideoAdServerRewardDidFail:(CloooudNativeExpressFullscreenVideoAd *)fullscreenVideoAd error:(NSError *)error {

}

详细接入可参照demo。